跳到主要内容

Wireshark 抓包

Wireshark 抓包界面介绍

说明:数据包列表区中不同的协议使用了不同的颜色区分。协议颜色标识定位在菜单栏 View --> Coloring Rules。如下所示

主要注意的窗口

1、Display Filter(显示过滤器), 用于设置过滤条件进行数据包列表过滤。菜单路径:Analyze --> Display Filters。

2、Packet List Pane(数据包列表), 显示捕获到的数据包,每个数据包包含编号,时间戳,源地址,目标地址,协议,长度,以及数据包信息。 不同协议的数据包使用了不同的颜色区分显示。

3、Packet Details Pane(数据包详细信息), 在数据包列表中选择指定数据包,在数据包详细信息中会显示数据包的所有详细信息内容。数据包详细信息面板是最重要的,用来查看协议中的每一个字段。各行信息分别为

  • Frame:物理层的数据帧概况
  • Ethernet II:数据链路层以太网帧头部信息
  • Internet Protocol Version 4:互联网层IP包头部信息
  • Transmission Control Protocol:传输层T的数据段头部信息,此处是TCP
  • Hypertext Transfer Protocol:应用层的信息,此处是HTTP协议

TCP包的具体内容

从下图可以看到 wireshark 捕获到的 TCP 包中的每个字段。

4、Dissector Pane(数据包字节区)。

Wireshark 开始抓包示例

1、打开 wireshark,主界面如下(要以管理员身份打开):

2、选择菜单栏上 Capture -> Option,勾选 WLAN 网卡(这里需要根据各自电脑网卡使用情况选择,简单的办法可以看使用的 IP 对应的网卡)。点击 Start。启动抓包。(别全选,只需要抓对应的网卡就行了)

3、wireshark 启动后,wireshark 处于抓包状态中。

执行需要抓包的操作,如在 cmd 窗口下执行 ping www.baidu.com。注意,PING 执行的是 ICMP 协议

ICMP 协议它用于 TCP/IP 网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,使网络管理者可以对所发生的问题作出诊断,然后采取适当的措施解决问题。

抓包测试

为避免其他无用的数据包影响分析,可以通过在过滤栏设置过滤条件进行数据包列表过滤,获取结果如下。说明:ip.addr == 163.177.151.110 and icmp 表示只显示 ICPM 协议且源主机 IP 或者目的主机 IP 为 163.177.151.110 的数据包。说明:协议名称 icmp 要小写。

抓 Localhost 的包

有时候希望抓 Localhost 的包来调试,但是一般 Localhost 的请求是不经过网卡的,这时需要安装一个 Npcap 来抓本地包

Npcap 官网地址

使用 wireshark 时,选择使用 Npcap Loopback Adapter 就可以了。

Npcap Loopback Adapter 只能抓取 loopback 的包,如果需要同时抓取 localhost 和外部访问,可以同时选择 Npcap Loopback Adapter 和以太网。

过滤器表达式的规则

过滤端口

tcp.port == 80

过滤器设置

wireshark 工具中自带了两种类型的过滤器,学会使用这两种过滤器会帮助我们在大量的数据中迅速找到我们需要的信息。

抓包过滤器(抓包前)

捕获过滤器的菜单栏路径为 Capture --> Capture Filters。用于在抓取数据包前设置。

如何使用?可以在抓取数据包前设置如下。

ip host 60.207.246.216 and icmp 表示只捕获主机 IP 为 60.207.246.216 的 ICMP 数据包。获取结果如下:

显示过滤器(抓包后)

显示过滤器是用于在抓取数据包后设置过滤条件进行过滤数据包。通常是在抓取数据包时设置条件相对宽泛或者没有设置导致抓取的数据包内容较多时使用显示过滤器设置条件过滤以方便分析。同样上述场景,在捕获时未设置抓包过滤规则直接通过网卡进行抓取所有数据包,如下

执行 ping www.huawei.com 获取的数据包列表如下

观察上述获取的数据包列表,含有大量的无效数据。这时可以通过设置显示器过滤条件进行提取分析信息。ip.addr == 211.162.2.183 and icmp。并进行过滤。

过滤 SSDP

在局域网中使用 wireshark 抓包过滤 http 的时候经常会出现一些干扰协议,例如 SSDP,使用过滤条件 “http” 有可能出现 N 多 ssdp 包

SSDP 使用 UDP 协议的 1900 端口传输所以过滤 http 时加上 tcp 的条件即可:

tcp && http
http&&!(udp.dstport == 1900)

仅过滤 SSDP ,如果只只想查看 SSDP 数据包,将过滤条件反过来即可:

显示过滤:

udp && http
udp.dstport == 1900

捕获过滤:

udp port 1900

设置协议解码

每个协议都有自己的解码器,因此包可能需要使用多个解码器才能完成解码。

wireshark 会尝试为每个包尝试找到正确的解码器(使用静态"routes"和结构"guessing"),特定的情况有可能会选择错误的解码器。例如,如果你将一个常见协议使用用一个不常见的 TCP 端口,Wireshark 将无法识别它,例如:HTTP 协议使用 800 端口而不是标准 80 端口。

References